package com.sky.service;

import com.sky.dto.DishDTO;
import com.sky.dto.DishPageQueryDTO;
import com.sky.entity.Dish;
import com.sky.result.PageResult;
import com.sky.vo.DishVO;

import java.util.List;

public interface DishService {
   /**
 * 添加菜品信息
 * 此方法通过接收一个 DishDTO 对象来添加菜品信息
 * @param dishDTO 菜品数据传输对象，包含菜品的相关信息
 */
void add(DishDTO dishDTO);

/**
 * 分页查询菜品信息
 * 此方法通过接收一个 DishPageQueryDTO 对象来实现分页查询功能
 * @param dishPageQueryDTO 菜品分页查询数据传输对象，包含分页查询条件
 * @return 返回一个 PageResult 对象，包含分页查询结果
 */
PageResult pageQuery(DishPageQueryDTO dishPageQueryDTO);

/**
 * 删除菜品信息
 * 此方法通过接收一个 Long 类型的列表来删除指定的菜品信息
 * @param ids 要删除的菜品的 ID 列表
 */
void delete(List<Long> ids);

/**
 * 启用或停用菜品
 * 此方法根据传入的状态和菜品 ID 来启用或停用菜品
 * @param status 菜品的状态，1 表示启用，0 表示停用
 * @param id 要操作的菜品的 ID
 */
void startOrStop(Integer status, Long id);

/**
 * 根据 ID 获取菜品信息
 * 此方法通过接收一个 Long 类型的 ID 来获取指定的菜品信息
 * @param id 要查询的菜品的 ID
 * @return 返回一个 DishVO 对象，包含菜品的详细信息
 */
DishVO getById(Long id);

/**
 * 根据 ID 更新菜品信息
 * 此方法通过接收一个 DishDTO 对象来更新指定的菜品信息
 * @param dishDTO 菜品数据传输对象，包含要更新的菜品的相关信息
 */
void updateById(DishDTO dishDTO);

/**
 * 根据分类 ID 查询菜品列表
 * 此方法通过接收一个 Long 类型的分类 ID 来获取该分类下的所有菜品信息
 * @param categoryId 菜品分类的 ID
 * @return 返回一个 Dish 对象的列表，包含该分类下的所有菜品
 */
List<Dish> list(Long categoryId);
   /**
     * 条件查询菜品和口味
     * @param dish
     * @return
     */
   List<DishVO> listWithFlavor(Dish dish);
}

